package com.tjetc._1collection._1list;

import java.util.LinkedList;

@SuppressWarnings("all")
public class _6LinkedListDetail {
    public static void main(String[] args) {
        /*
            1.创建的LinkedList
            first和last 都为null
            2.第一次add
            只有一个元素 此时的first和last都指向同一个节点

            -----------------------
            头插
            private void linkFirst(E e) {
                final Node<E> f = first;
                final Node<E> newNode = new Node<>(null, e, f);
                first = newNode;
                if (f == null)
                    last = newNode;
                else
                    f.prev = newNode;
                size++;
                modCount++;
            }


         */
        LinkedList linkedList = new LinkedList();
        linkedList.add(1);
        linkedList.addFirst(2);
        /*
            ---------------删除逻辑---------------
            1.
            public E removeFirst() {
                final Node<E> f = first;
                if (f == null)
                    throw new NoSuchElementException();
                return unlinkFirst(f);
            }

            2.unlinkFirst开始真正的删除
            private E unlinkFirst(Node<E> f) {
                保存当前数据 目的是将来要返回要删除的数据
                final E element = f.item;
                保存下一节点
                final Node<E> next = f.next;
                情况节点数据
                f.item = null;
                引用置空 方便垃圾回收
                f.next = null; // help GC
                将头结点指向下一个节点
                first = next;
                判断下一个节点是否为null
                if (next == null)
                    last = null;
                else
                    如果有下一个节点 那么就将下一个节点的pre置空
                    next.prev = null;
                个数减1
                size--;
                modCount++;
                将元素返回
                return element;
            }





         */
        System.out.println("linkedList.remove() = " + linkedList.remove());
    }
}
